package com.mmd.tencent.service;

import com.alibaba.fastjson.JSONObject;
import com.mmd.tencent.enums.TradeType;

/**
 * SDK处理回调需要实现该接口
 */
public interface NotifyDispose {
    /**
     * 支付成功回调
     * 交易类型，枚举值：
     * JSAPI：公众号支付
     * NATIVE：扫码支付
     * APP：APP支付
     * MICROPAY：付款码支付
     * MWEB：H5支付
     * FACEPAY：刷脸支付
     * @param tradeType 交易类型 示例值：MICROPAY
     * @param transactionId 微信流水号
     * @param attach 附加参数
     * @param dataJsonObject 支付回调解密后所有数据
     * @return boolean
     */
    boolean paySuccess(TradeType tradeType, String transactionId, String attach, JSONObject dataJsonObject) throws Exception;

    /**
     * 退款成功回调
     * @param transactionId 微信流水号
     * @param outRefundNo 退款单号
     * @param dataJsonObject 退款回调解密后所有数据
     * @return boolean
     */
    boolean refundSuccess(String transactionId, String outRefundNo, JSONObject dataJsonObject) throws Exception;

    /**
     * 支付成功回调结果未成功执行方法
     * 交易类型，枚举值：
     * JSAPI：公众号支付
     * NATIVE：扫码支付
     * APP：APP支付
     * MICROPAY：付款码支付
     * MWEB：H5支付
     * FACEPAY：刷脸支付
     * @param tradeType 交易类型 示例值：MICROPAY
     * @param eventType 非成功类型
     * @param tradeState 非成功类型
     * @param dataJsonObject 支付回调解密后所有数据
     * @return boolean
     */
    boolean payNotSuccess(TradeType tradeType, String eventType, String tradeState, JSONObject dataJsonObject) throws Exception;

    /**
     * 退款回调 未成功执行方法
     * @param eventType 非成功类型
     * @param refundStatus 非成功类型
     * @param dataJsonObject 退款回调解密后所有数据
     * @return boolean
     */
    boolean refundNotSuccess(String eventType, String refundStatus, JSONObject dataJsonObject) throws Exception;
}
